/**
 * 泛型与类结合在一起 可以非常好的配合使用
 */
{
    var NumberCollection = /** @class */ (function () {
        function NumberCollection() {
            this.data = [];
        }
        NumberCollection.prototype.push = function (_a) {
            var _b;
            var arg = _a.slice(0);
            (_b = this.data).push.apply(_b, arg);
        };
        NumberCollection.prototype.shift = function () {
            return this.data.shift();
        };
        return NumberCollection;
    }());
    var numberCollect = new NumberCollection();
    numberCollect.push([1, 2, 3]); // 只能添加数字类型 添加其他类型会出错
    var StringCollection = /** @class */ (function () {
        function StringCollection() {
            this.data = [];
        }
        StringCollection.prototype.push = function (_a) {
            var _b;
            var args = _a.slice(0);
            (_b = this.data).push.apply(_b, args);
        };
        StringCollection.prototype.shift = function () {
            return this.data.shift();
        };
        return StringCollection;
    }());
    var stringCollect = new StringCollection();
    stringCollect.push(["1", "2", "3", "4"]); // 只能添加数字 其他的类型会出错
    /**
     * 相同的功能 却定义了两个类 所以这种情况就时泛型最佳使用场景
     */
    var BaseCollection = /** @class */ (function () {
        function BaseCollection() {
            this.data = [];
        }
        BaseCollection.prototype.push = function (_a) {
            var _b;
            var args = _a.slice(0);
            (_b = this.data).push.apply(_b, args);
        };
        BaseCollection.prototype.shift = function () {
            return this.data.shift();
        };
        return BaseCollection;
    }());
    /**
     * 完美解决刚刚的问题
     */
    var b1 = new BaseCollection();
    b1.push(["1", "2", "3"]); // b1 new 的是 String类型的泛型集合
    var b2 = new BaseCollection();
    b2.push([1, 2, 3, 4]); // b2 new 的是 Number 类型的泛型集合
    var b3 = new BaseCollection();
    b3.push([
        { name: "Jimmy", age: 22 },
        { name: "xuexue", age: 23 },
    ]);
    console.log(b3.shift());
}
